/**
 * 
 */
package br.com.skynix.tcmc.service.entidadedominio;

import java.util.List;

import org.primefaces.model.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import br.com.skynix.tcmc.base.model.EntidadeDominio;
import br.com.skynix.tcmc.model.rh.Empresa;

/**
 * @author mgrb
 * 
 */
@Service
@Transactional(readOnly = true)
public class EntidadeDominioServiceImpl implements EntidadeDominioService {

	@Autowired
	private EntidadeDominioDao entidadeDominioDao;

	/*
	 * (non-Javadoc)
	 * 
	 * @see br.com.skynix.tcmc.base.IService#findByPK(java.lang.Long)
	 */
	@Override
	public EntidadeDominio buscarPelaChave(Long id,
			Class<? extends EntidadeDominio> clazz) {
		return entidadeDominioDao.findByPK(id, clazz);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.com.skynix.tcmc.base.IService#update(br.com.skynix.tcmc.base.Entidade)
	 */
	@Override
	@Transactional
	public void alterar(EntidadeDominio entidade) {
		entidadeDominioDao.update(entidade);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.com.skynix.tcmc.base.spring.IServiceAuditavel#excluir(br.com.skynix
	 * .tcmc.base.model.EntidadeAuditavel)
	 */
	@Override
	@Transactional
	public void excluir(EntidadeDominio entidade) {
		entidade.setAtivo(false);
		entidade.setDeletado(true);
		entidadeDominioDao.update(entidade);

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.com.skynix.tcmc.base.IService#insert(br.com.skynix.tcmc.base.Entidade)
	 */
	@Override
	@Transactional
	public Long inserir(EntidadeDominio entidade) {
		return entidadeDominioDao.insert(entidade);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see br.com.skynix.tcmc.base.IService#findByPK(java.lang.Long)
	 */
	@Override
	@Deprecated
	public EntidadeDominio buscarPelaChave(Long id) {
		throw new UnsupportedOperationException(
				"Esta operação não é implementada neste serviço.");
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.com.skynix.tcmc.base.IServiceAuditavel#getCurrentVerssion(java.lang
	 * .Long)
	 */
	@Override
	@Deprecated
	public Integer getVersaoAtual(Long id) {
		throw new UnsupportedOperationException(
				"Esta operação não é implementada neste serviço.");
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.com.skynix.tcmc.base.IServiceAuditavel#findByExemple(br.com.skynix
	 * .tcmc.base.EntidadeAuditavel)
	 */
	@Override
	public List<EntidadeDominio> buscarPeloExemplo(
			EntidadeDominio entidadeExemplo) {
		return entidadeDominioDao.findByExemple(entidadeExemplo,
				entidadeExemplo.getClass());
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see br.com.skynix.tcmc.base.IServiceAuditavel#listAll()
	 */
	@Override
	@Deprecated
	public List<EntidadeDominio> listarTodos() {
		throw new UnsupportedOperationException(
				"Esta operação não é implementada neste serviço.");
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.com.skynix.tcmc.base.IServiceAuditavel#findByExemple(br.com.skynix
	 * .tcmc.base.EntidadeAuditavel, int, int, java.lang.String,
	 * org.primefaces.model.SortOrder)
	 */
	@Override
	public List<EntidadeDominio> buscarPeloExemplo(EntidadeDominio modelo,
			int first, int pageSize, String sortField, SortOrder sortOrder) {
		return entidadeDominioDao.findByExemple(modelo, first, pageSize,
				sortField, sortOrder);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.com.skynix.tcmc.base.IServiceAuditavel#rowCount(br.com.skynix.tcmc
	 * .base.EntidadeAuditavel)
	 */
	@Override
	public int getQuantidadeRegistros(EntidadeDominio modelo) {
		return entidadeDominioDao.rowCount(modelo);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.com.skynix.tcmc.base.spring.IServiceAuditavel#listarTodos(br.com.skynix
	 * .tcmc.model.rh.Empresa)
	 */
	@Override
	public List<EntidadeDominio> listarTodos(Empresa empresa) {
		throw new UnsupportedOperationException(
				"Esta operação não é implementada neste serviço.");
	}
}
